草庐IT

Python NotImplemented 常量

全部标签

c++ - 返回常量对象并将其分配给非常量对象

我发现一段代码的奇怪行为显然忽略了const-ness:#includeusingstd::cerr;classA{public:A(){cerr首先,我在这里确实期望:a是一个常量,因此调用get()的常量版本。接下来返回常量对象,但是左边是非常量对象b,所以应该调用拷贝构造函数。哪个不是:A::A()constAA::get()constA::A()A::~A()A::~A()这种行为是C++标准所期望的吗?那么,临时对象的常量性是否可以被RVO简单地忽略?以及如何在此处强制执行复制?禁用复制省略的输出(-fno-elide-constructors)进行额外的移动和预期的复制构造

c++ - 静态常量缓存结果

在下面的例子中——#includeintsomeMethod(){staticinta=20;staticconstintresult=a+1;++a;std::cout输出为-[21]21[22]21[23]21阻止result值在对同一函数的后续调用中被修改的原因是什么?我也打印了变量a的输出,它肯定是递增的,因为它也是静态的,所以同一个方法不能存在多个拷贝。IDEONE-COMPILEROUTPUT 最佳答案 此处的const只是打扰了读者的真正原因。此代码执行完全相同。intsomeMethod(){staticinta=2

c++ - 数组大小和常量

这个问题在这里已经有了答案:关闭9年前。PossibleDuplicate:initializearraysizefromanotherarrayvalue在C++中constinta[]={1,2,3,4,5};intb[a[2]];intmain(){return0;}代码在第2行给出了错误;但是,如果它像下面这样编译后不会出错:constinta=3;intb[a];intmain(){return0;}这是为什么呢?但是,如果我在main中定义数组b,那么在这两种情况下都可以...

C++ STL,常量迭代器,find()

我目前正在学习STL,我对find和const迭代器有一些不确定性。假设我有一个查找功能:some_stl_container::const_iteratorfound=myContainer.find(value);在那之后,我应该检查我为found得到的是另一个const_iterator还是它对简单的迭代器进行检查有效。这样做基本上会有什么区别:if(found!=myContainer.cend())还有这个:if(found!=myContainer.end())第一个看起来更准确(至少对我而言),但第二个应该也能正常工作,对吧? 最佳答案

c++ - 常量自动引用绑定(bind)到(空)指针 - 实际类型是什么?

在查看一些代码时,我遇到了一个包含以下行的结构:if(constauto&foo=std::get_if(&bar))//notetheampersand!哪里bar是std::variant.这里的问题是get_ifmayreturnanullpointer而且我不明白为什么该声明有效。考虑这个类似的MCVE:#includestructFoo{inta=42;};Foo*f(){returnnullptr;}intmain(){constauto&foo=f();//ReturnsanullptrthatbindstoFoo*&-UB?//static_assert(std::is

c++ - 将大小为编译时常量的数组初始化为单个值

我有一个c风格的数组,其大小由#define定义,并且可以根据编译选项进行更改,例如#ifLINUX#defineSIZE4#else#defineSIZE5#endifstaticintmyArr[SIZE]={/*???*/};如何将整个数组初始化为非零值,例如所有42? 最佳答案 我不知道C风格数组的解决方案,尽管使用constexpr和C++17你可以使用std::array来解决这个问题。constexprstd::arraycreateFilledArray(intvalue){std::arraya{0};for(au

c++ - 从流创建具有常量参数的对象

让我们假设我有一个类#includeusingnamespacestd;classTest{public:friendistream&operator>>(istream&input,Test&test){input>>test.dummy;returninput;};friendostream&operator这不起作用,因为dummy是常量。有没有一种方法可以从文件加载并重新创建一个参数不变的对象? 最佳答案 “我真的,真的需要这个”方式使用const_cast。通常你将它用于外部看起来像常量的对象,但在内部它们确实需要时不时地

c++ - 添加额外的常量会导致编译器错误

这在GCC8.2上编译得很好:classM{public:constPointer*getPointer()const{return_ptr;}private:Pointer*_ptr{nullptr};};但是当我向函数添加另一个常量时:classM{public:constPointer*constgetPointer()const{return_ptr;}private:Pointer*_ptr{nullptr};};我得到编译器错误:error:typequalifiersignoredonfunctionreturntype[-Werror=ignored-qualifier

c++ - 重写非常量虚方法是否隐藏了常量重载?

考虑:#includeusingnamespacestd;structA{virtualvoidf(){cout(我正在使用GCC。)所以f()的const版本似乎隐藏在C中。这对我来说很有意义,但这是标准强制要求的吗? 最佳答案 我将(再次)链接这个很棒的article:First,[thecompiler]looksintheimmediatescope,inthiscasethescopeofclassC,andmakesalistofallfunctionsitcanfindthatarenamedf(regardlesso

c++ - 作为类成员的常量引用

即使这个主题在这里讨论了很多次,我也找不到关于我的具体案例的结论性解释。const会临时延长RefTest的生命周期吗?下面的例子合法吗?#includeclassRefTest{public:RefTest(conststd::string&input):str(input){}~RefTest(){std::cout 最佳答案 引用不会延长生命周期。该代码是合法的,但这只是因为在构造函数完成后您永远不会访问ref_m。临时绑定(bind)到构造函数参数ref。稍后将另一个引用绑定(bind)到它,ref_m,不会延长生命周期。如